import datetime
import logging
import os

# entity.py
from sqlalchemy import Column, String, Float, Integer, Date, DateTime, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlmodel import SQLModel, Session

Base = declarative_base()
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR, "sqlite", "test.db")

# 数据库配置
sqlite_db_location = f"sqlite:///{db_path}"
logging.info(f"初始化数据库连接：{sqlite_db_location}")
engine = create_engine(sqlite_db_location, connect_args={"check_same_thread": False})  # 使用SQLite数据库，路径为相对路径
engine.echo = True  # 输出SQL语句
# SQLModel.metadata.create_all(engine)  # 会自动关联现有表

class MatchData(Base):
    __tablename__ = 'match_data'

    id = Column(Integer, primary_key=True)
    序号 = Column(Integer)
    日期 = Column(String)  # 修改为String类型以匹配TEXT
    联赛 = Column(String)
    主队排名 = Column('主队排名', Integer)  # 映射到通用排名列
    主队 = Column(String)
    主队比分 = Column(Integer)  # 新增主队比分
    客队比分 = Column(Integer)  # 新增客队比分
    客队 = Column(String)
    客队排名 = Column('客队排名', Integer)  # 同时映射到排名列
    半场比分 = Column(String)
    赛季 = Column(String)
    进球数 = Column(Integer)
    赛果 = Column(String)
    编号 = Column(Integer)  # 类型改为Integer


    威廉希尔_初盘_胜 = Column('威廉希尔_初盘_胜', Float)
    威廉希尔_初盘_平 = Column('威廉希尔_初盘_平', Float)
    威廉希尔_初盘_负 = Column('威廉希尔_初盘_负', Float)
    威廉希尔_12小时_胜 = Column('威廉希尔_12小时_胜', Float)
    威廉希尔_12小时_平 = Column('威廉希尔_12小时_平', Float)
    威廉希尔_12小时_负 = Column('威廉希尔_12小时_负', Float)
    威廉希尔_6小时_胜 = Column('威廉希尔_6小时_胜', Float)
    威廉希尔_6小时_平 = Column('威廉希尔_6小时_平', Float)
    威廉希尔_6小时_负 = Column('威廉希尔_6小时_负', Float)
    威廉希尔_2小时_胜 = Column('威廉希尔_2小时_胜', Float)
    威廉希尔_2小时_平 = Column('威廉希尔_2小时_平', Float)
    威廉希尔_2小时_负 = Column('威廉希尔_2小时_负', Float)
    威廉希尔_1小时_胜 = Column('威廉希尔_1小时_胜', Float)
    威廉希尔_1小时_平 = Column('威廉希尔_1小时_平', Float)
    威廉希尔_1小时_负 = Column('威廉希尔_1小时_负', Float)
    威廉希尔_即时_胜 = Column('威廉希尔_即时_胜', Float)
    威廉希尔_即时_平 = Column('威廉希尔_即时_平', Float)
    威廉希尔_即时_负 = Column('威廉希尔_即时_负', Float)

    立博_初盘_胜 = Column('立博_初盘_胜', Float)
    立博_初盘_平 = Column('立博_初盘_平', Float)
    立博_初盘_负 = Column('立博_初盘_负', Float)
    立博_12小时_胜 = Column('立博_12小时_胜', Float)
    立博_12小时_平 = Column('立博_12小时_平', Float)
    立博_12小时_负 = Column('立博_12小时_负', Float)
    立博_6小时_胜 = Column('立博_6小时_胜', Float)
    立博_6小时_平 = Column('立博_6小时_平', Float)
    立博_6小时_负 = Column('立博_6小时_负', Float)
    立博_2小时_胜 = Column('立博_2小时_胜', Float)
    立博_2小时_平 = Column('立博_2小时_平', Float)
    立博_2小时_负 = Column('立博_2小时_负', Float)
    立博_1小时_胜 = Column('立博_1小时_胜', Float)
    立博_1小时_平 = Column('立博_1小时_平', Float)
    立博_1小时_负 = Column('立博_1小时_负', Float)
    立博_即时_胜 = Column('立博_即时_胜', Float)
    立博_即时_平 = Column('立博_即时_平', Float)
    立博_即时_负 = Column('立博_即时_负', Float)

    _365_初盘_胜 = Column('365_初盘_胜', Float)
    _365_初盘_平 = Column('365_初盘_平', Float)
    _365_初盘_负 = Column('365_初盘_负', Float)
    _365_12小时_胜 = Column('365_12小时_胜', Float)
    _365_12小时_平 = Column('365_12小时_平', Float)
    _365_12小时_负 = Column('365_12小时_负', Float)
    _365_6小时_胜 = Column('365_6小时_胜', Float)
    _365_6小时_平 = Column('365_6小时_平', Float)
    _365_6小时_负 = Column('365_6小时_负', Float)
    _365_2小时_胜 = Column('365_2小时_胜', Float)
    _365_2小时_平 = Column('365_2小时_平', Float)
    _365_2小时_负 = Column('365_2小时_负', Float)
    _365_1小时_胜 = Column('365_1小时_胜', Float)
    _365_1小时_平 = Column('365_1小时_平', Float)
    _365_1小时_负 = Column('365_1小时_负', Float)
    _365_即时_胜 = Column('365_即时_胜', Float)
    _365_即时_平 = Column('365_即时_平', Float)
    _365_即时_负 = Column('365_即时_负', Float)

    # Pinnacle赔率字段（结构同威廉希尔）
    Pinnacle初盘_胜 = Column('Pinnacle_初盘_胜', Float)
    Pinnacle初盘_平 = Column('Pinnacle_初盘_平', Float)
    Pinnacle初盘_负 = Column('Pinnacle_初盘_负', Float)
    Pinnacle_12小时_胜 = Column('Pinnacle_12小时_胜', Float)
    Pinnacle_12小时_平 = Column('Pinnacle_12小时_平', Float)
    Pinnacle_12小时_负 = Column('Pinnacle_12小时_负', Float)
    Pinnacle_6小时_胜 = Column('Pinnacle_6小时_胜', Float)
    Pinnacle_6小时_平 = Column('Pinnacle_6小时_平', Float)
    Pinnacle_6小时_负 = Column('Pinnacle_6小时_负', Float)
    Pinnacle_2小时_胜 = Column('Pinnacle_2小时_胜', Float)
    Pinnacle_2小时_平 = Column('Pinnacle_2小时_平', Float)
    Pinnacle_2小时_负 = Column('Pinnacle_2小时_负', Float)
    Pinnacle_1小时_胜 = Column('Pinnacle_1小时_胜', Float)
    Pinnacle_1小时_平 = Column('Pinnacle_1小时_平', Float)
    Pinnacle_1小时_负 = Column('Pinnacle_1小时_负', Float)
    Pinnacle_即时_胜 = Column('Pinnacle_即时_胜', Float)
    Pinnacle_即时_平 = Column('Pinnacle_即时_平', Float)
    Pinnacle_即时_负 = Column('Pinnacle_即时_负', Float)

    # 澳门赔率字段（结构同威廉希尔）
    澳门_初盘_胜 = Column('澳门_初盘_胜', Float)
    澳门_初盘_平 = Column('澳门_初盘_平', Float)
    澳门_初盘_负 = Column('澳门_初盘_负', Float)
    澳门_12小时_胜 = Column('澳门_12小时_胜', Float)
    澳门_12小时_平 = Column('澳门_12小时_平', Float)
    澳门_12小时_负 = Column('澳门_12小时_负', Float)
    澳门_6小时_胜 = Column('澳门_6小时_胜', Float)
    澳门_6小时_平 = Column('澳门_6小时_平', Float)
    澳门_6小时_负 = Column('澳门_6小时_负', Float)
    澳门_2小时_胜 = Column('澳门_2小时_胜', Float)
    澳门_2小时_平 = Column('澳门_2小时_平', Float)
    澳门_2小时_负 = Column('澳门_2小时_负', Float)
    澳门_1小时_胜 = Column('澳门_1小时_胜', Float)
    澳门_1小时_平 = Column('澳门_1小时_平', Float)
    澳门_1小时_负 = Column('澳门_1小时_负', Float)
    澳门_即时_胜 = Column('澳门_即时_胜', Float)
    澳门_即时_平 = Column('澳门_即时_平', Float)
    澳门_即时_负 = Column('澳门_即时_负', Float)

    # 其他博彩公司字段（结构同上）
    # 365、Pinnacle、澳门赔率字段按相同模式添加

    def __str__(self):
        return f"MatchData(id={self.id}, number={self.编号}, date={self.日期}, league={self.联赛}, " \
               f"home_team_rank={self.主队排名}, home_team={self.主队}, home_team_score={self.主队比分}, " \
               f"away_team={self.客队}, half_time_score={self.半场比分}, season={self.赛季}, " \
               f"goals={self.进球数}, result={self.赛果}, number={self.编号})"

def create_match(match_data: MatchData):
    """创建新用户"""
    with Session(engine) as session:
        session.add(match_data)
        session.commit()
        session.refresh(match_data)
        return match_data


def get_all_match_data():
    """查询所有比赛数据"""
    with Session(engine) as session:
        statement = MatchData.__table__.select()
        results = session.execute(statement).fetchall()
        return results

if __name__ == '__main__':

    match_data = MatchData(
        序号=1,
        日期=datetime.datetime(2023, 1, 1),
        联赛="English Premier League",
        主队排名=1,
        主队="Manchester United",
        主队比分=2,
        客队="Liverpool",
        半场比分="1-0",
        赛季="2022-2023",
        进球数=2,
        赛果="胜",
        编号="123456",
        william_hill_initial_win=1.5,
    )

    create_match(match_data)

    # print(get_all_match_data())